# -*- coding: utf-8 -*-

"""
  @author: tangliqi
  @date: 2022/11/4 18:29
  @python version: 3.6 
  @contact me: 110
  ---------------------------------------
  @desc: python算法实现 => 上下文管理.py
"""
from contextlib import contextmanager


# ============================  类的实现方式  ============================
class File:
    def __init__(self, name):
        self.name = name

    def __enter__(self):
        print("进来了")
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        print("退出了")
        print(exc_type, exc_val, exc_tb)

    def test(self):
        print(self.name)


# ============================  函数的实现方式  ============================
# 在 Python 中，函数实现方式，需要通过contextlib模块中的contextmanager来实现。
# 原理是通过 yield 关键字实现。

@contextmanager
def open_file():
    print("aa")
    yield "哈哈哈"
    print("bbb")


# 类实现
with File("test") as f:
    f.test()

# 函数实现
with open_file() as f:
    print(f)
